#include<cstdio>//uncle-lu
#include<stdlib.h>
int n, top;
int line[100];
//我们利用n，保存当前n所剩没有加过的值，然后对当前所剩数进行搜索
void func(int last)
{
	if(n == 0)
	{
		if(top==1) return ;
        //objective 3如何利用top判断前面一项把n全用完了的状态？而且，如果第一项n就用完了，根据题意我们应该怎么操作？
		printf("%d",line[1]);//思考：为什么不直接把line[1]放进for循环里呢？
		for(int i=2; i<=top; ++i)
			printf("+%d", line[i]);
		printf("\n");
		return ;
	}

	for(int i=last; i<=n; ++i)
	{
      	top++;
		line[top] = i;
		n = n - i; //剩余的n变小
		func(i);
		n = n + i; //n还原
		top--;
	}

	return ;
}

int main()
{
	scanf("%d",&n);
  	top=0;//提示：记得初始化变量！有时候就是因为不初始化变量本地ac交题wa。
	func(1);
    system("pause");
	return 0;
}
